/* start of total inode structure */
typedef struct inode{
  int inodeNumber;
  int size /* total size in bytes of file */
  int inodeBlockList[13]; /* inodeBlockList[12] is for single indirection */
}inode_t;

inode_t createInode(void);

/* end */

/* start of total directory structure */
typedef struct directoryNode{
  char* fileName;
  int inodeNumber;
  directoryNode* parent;
  directoryNode* children[];
}directoryNode_t;
directoryNode_t*;
/* end */

/* start of blockfreelist structure */
#define SUPER_BLOCK_NUMBER 0

typedef struct blockFreeList{
int bitmap;
}blockFreeList_t;

BlockFreeList_t createFreeBlockList(void);

int getUnusedBlock(BlockFreeList_t* list);
/* Pseudocode:
  get block with details of unused blocks
  int bitmap = blockContents[0]
*/

int setBlockToUsed(BlockFreeList_t* list, int blockNumber);
int setBlockToUnused(BlockFreeList_t* list, int blockNumber);
/* end */

/* start of block structure */
#define SIZE_OF_BLOCK 1024

typedef struct block{
int blockContents[SIZE_OF_BLOCK];
}
int serializeDirectory(directoryNode* root);
int deserializeDirectory(void);

/* end */
